草庐IT

GCD ③ dispatch_barrier

全部标签

ios - 在嵌套 block 中调用 dispatch_group_notify 的次数与调用 dispatch_group_leave 的次数一样多

我有下面这个逻辑;它们基本上是3个嵌套的调度组block。第一组(组)将执行3个简短的异步任务(仅从网络服务下载数据)和一个较长的异步任务:将未同步的记录上传到网络服务,在本地删除同步的记录最后从网络服务下载记录(首先是一个包含ID和基本信息的数组,然后是这些记录中的每一个)。第二组(saveGroup)是较长任务的一部分。它将等到对网络服务的所有未同步记录请求完成。第三个(downloadGroup)将等到对服务的所有这些单个记录下载请求完成。一切顺利,直到第三个调度组。如您所见,我获取了服务器上记录的ID和基本信息,遍历数组并使用downloadGroup调用dispatch_gr

ios - GCD 问题和线程过多

我有一个图像加载器类,它提供NSURL加载和来自网络的图像并执行完成block。代码其实很简单-(void)downloadImageWithURL:(NSString*)URLStringcompletion:(BELoadImageCompletionBlock)completion{dispatch_async(_queue,^{//dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0),^{UIImage*image=nil;NSURL*URL=[NSURLURLWithString:UR

ios - 核心数据的 NSOperation VS GCD

对于需要在一个线程上将数据存储在Core-Data中,在另一个线程中从Core-Data中读取数据的情况,什么更适合?我在考虑GCD,但它如何与为每个线程创建NSManagedObjectContext一起工作?如何在队列中创建这些对象?当在各种线程上进行更改时,需要更新/同步数据存储,这用GCD还是NSOperation更好?我希望能够在根据需要读取和写入数据存储时将block传递到2个队列,而不会出现损坏存储或存储不同版本的问题。 最佳答案 GCD和NSOperation之间的争论基本上可以归结为使用最高抽象级别为您提供良好解决

iphone - dispatch_group_wait 与 GCD

因此,我将一组图像发布到我的服务器。我想使用GCD异步发布数组,但我也想使发生这种情况的方法同步,以便我可以传回单个响应对象。然而,方法dispatch_group_wait似乎立即返回(而不是等待我的block完成)。这是一个问题,因为我在一个block中使用一个block吗?NSArray*keys=[imagesallKeys];__blockNSMutableDictionary*responses=[NSMutableDictionarydictionaryWithCapacity:[imagescount]];dispatch_group_tgroup=dispatch_g

iphone - GCD 获取队列名称/标签

如何获取当前队列名称?我的意思是像com.example.myqueue这样的队列标签。在Xcode4调试器中,我只能看到_block_invoke_1。 最佳答案 dispatch_queue_get_label怎么样?? 关于iphone-GCD获取队列名称/标签,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5166711/

ios - 是否需要在GCD中的ARC下创建一个autorelease pool?

我有一个CAEAGLLayer的运行循环方法,它使用GCD来序列化对共享ivar的访问。我目前的绘图代码是这样构造的:-(void)draw{dispatch_sync(serialDrawingQueue,^{@autoreleasepool{[selfdrawingStart];[spriteAdraw];[spriteBdraw];[selfdrawingEnd];}});}draw方法由CADisplayLink调用。当我使用GCDblock时,@autoreleasepool是否必需? 最佳答案 来自Appledocs:I

ios - GCD中的dispatch_barrier_async和串行队列,它们有什么区别?

我发现dispatch_barrier_async的工作机制是,只有在之前加入队列的所有block都完成后才会执行。它的工作方式类似于串行队列。因此,我不去区分这两种运行模式在GCD中的区别。 最佳答案 dispatch_barrier_[a]sync旨在与并发队列一起使用。它们还应与对dispatch_[a]sync的调用一起使用。常见的用法是“多读者,一个作者”模式。您设置了一个并发队列。对于“阅读器”block,您使用dispatch_[a]sync。对于“编写器”block,您使用dispatch_barrier_[a]sy

ios - dispatch_sync(dispatch_get_global_queue(xxx), task) 是同步还是异步

苹果的文档说,dispatch_get_global_queue()是并发队列,dispatch_sync是串行的意思,那么任务是异步处理还是同步处理? 最佳答案 您对什么是队列以及异步与同步的含义感到困惑。队列是可以在其上运行block的实体。这些可以是串行的或并发的。串行意味着如果你按照A、B、C、D的顺序放置block,那么它们将被执行A,然后是B,然后是C,然后是D。并发意味着这些相同的block可能以不同的顺序执行,并且可能甚至不止一个同时运行(显然,假设您有多个要运行的内核)。然后是异步与同步。async的意思是当你调用

ios - dispatch_async 和 [NSURLConnection sendSynchronousRequest]

围绕这个话题有各种各样的问题,很多建议说不要在dispatch_async中使用sendSynchronousRequest,因为它会阻塞线程,并且GCD会产生很多新的工作线程来服务所有同步URL请求。关于iOS5[NSURLConnectionsendAsynchronousRequest:queue:completionHandler:]在幕后做了什么,似乎没有人给出明确的答案。我读过的一篇文章指出它“可能”进行优化,并且“可能”使用运行循环——但肯定不会为每个请求创建一个新线程。当我在使用sendAsynchronousRequest:queue:completionHandle

objective-c - 奇怪的崩溃问题为 :- Dispatch queue: com. apple.root.default-overcommit-priority

我正在开发一个应用程序,其中在ASINetworkQueue中添加了很多操作。这些操作基本上用于从服务器获取图像,然后成功完成后在表格View单元格中设置图像。一切都很好。我有一个按钮,一个TableView单元格,在该按钮上打开另一个ViewController。在另一个View上有一个十字按钮,我可以在该按钮上弹出该ViewController。现在,当点击十字按钮时,应用程序有时会在那里崩溃,有时当返回到上一个View并滚动我的表格View时会崩溃。当我看到崩溃日志时,我发现以下代码出现在任何崩溃的线程中。有时它是崩溃的线程2,有时它是崩溃的线程12,有时它是崩溃的线程6但该线程